<?php
    abstract class EngineSupervisor
	{
		public function __construct()
		{
		}
		
		public function __call($method, $args)
		{
			$class = $_GET['mod'];
			echo 'W klasie '.$class.' niema takiej akcji jak '.$method;exit;
            $this -> FriendlyLink(SITE_ADDRESS);
		}
		
		protected function Redirect($mod,$view,$act)
		{
			header('Location:index.php?mod='.$mod.'&view='.$view.'&act='.$act);
			exit;
		}
		
		public function FriendlyLink($friendlyLink)
		{
			header("Location:$friendlyLink");
			exit;
		}
		
		protected function Error($error)
		{
			$_SESSION[PREFIX]['error']=$error;
		}
		
		protected function ChangePolishSigns($text)
		{
			return $text;
		}
		
		protected function checkId($id)
		{
			if(isset($id) && ctype_digit($id))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		
		protected function CheckSqlResult($result,$success_message,$error_message)
		{
			if($result =='ex')
			{
				$_SESSION[PREFIX]['message']=array
								(
								'type' => 'error',
								'content' => $error_message
								);
			}
			else
			{
				$_SESSION[PREFIX]['message'] = array
								(
								'type' => 'success',
								'content' => $success_message
								);
			}
		}
		
		
		protected function SetFiltr()
		{
			if(isset($_SESSION[PREFIX]['filtr']))
			{
				$filtr = $_SESSION[PREFIX]['filtr'];
				
				// usuwanie ukośników
				foreach($filtr as $key=>$value)
				{
					
					$filtr[$key] = stripslashes($value);
					
				}
				
				unset($_SESSION[PREFIX]['filtr']);
				return $filtr;
			}
			else
			{
				return null;
			}
		}
		
		/**
		 * Funkcja pobiera wiadomość dla nagłówka z sesji i usuwa zmienną z tablicy sesyjnej
		 *
		 * @return array tablica wiadomości dla nagłówka
		 */
		protected function getMessage()
		{
			
			if(isset($_SESSION[PREFIX]['message']))
			{
				
				$message = $_SESSION[PREFIX]['message'];
				unset($_SESSION[PREFIX]['message']);
				return $message;
				
			}
			else
			{
				
				return false;
				
			}
			
		}
		
		/**
		 * Funkcja przypisuje do sesji wiadomość dla nagłówka
		 *
		 * @param unknown_type $message
		 */
		protected function setMessage($message)
		{
			$_SESSION[PREFIX]['message'] = $message; 
		}
		
		/**
		 * Funkcja przypisuje do sesji tablicę z informacjami o błędach w formularzach
		 *
		 * @param unknown_type $filtr
		 */
		protected function putFiltr($filtr)
		{
			
			$_SESSION[PREFIX]['filtr'] = $filtr; 
			
		}		
		
		
		/**
		 * Funkcja zwraca offset dla zapytań SQL 
		 *
		 * @param Integer $page_number - numer strony
		 * @param Integer $rec_on_page - ilość rekordów na stronie
		 * @return Integer - offset dla zapytania SQL
		 */
		protected function GetOffset($page_number,$rec_on_page)
		{
			
			
			if( $page_number == 0 || $rec_on_page == 0)
			{
				
				return 0;
				
			} 
			else 
			{
				
				return $page_number*$rec_on_page - $rec_on_page;
				
			}
			
		}
		
		/**
		 * Funkcja zwraca ilość stron dla podanych parametrów
		 *
		 * @param unknown_type $count_records - liczba znalezionych rekordów
		 * @param unknown_type $record_per_page - liczba rekordów na stronie
		 * @return Integer - liczba stron
		 */
		protected function CountPages($count_records,$record_per_page)
		{
			
			return ceil($count_records/$record_per_page);
			
		}
		
		
		/**
		 * Funkcja zamienia znaki zapytania w zapytaniu SQL na argumenty podane w tablicy dla metody PDO
		 *
		 * @param String $pdo_query - treść zapytania PDO
		 * @param array $pdo_array - tablica argumentów dla PDO
		 * @return String
		 */
		 protected function BuildQuery($pdo_query,$pdo_array){
			
			$query_arr = explode('?',$pdo_query);
			
			$result_query = '';
			
			foreach($query_arr as $key=>$value){
				
				if(isset($pdo_array[$key]))
					$result_query.=$value."'".$pdo_array[$key]."'";
				else 
					$result_query.=$value;
					
			}
			
			echo $result_query;
			
		} // end BuildQuery
		
		/**
		 * Funkcja umozliwiajaca wysylanie wiadomosci na poczte prywatna
		 * @return 
		 */
		
		protected function SendEmail($eEmail, $sContent, $sSubject,$sSender='') {
		
			$sSubject = "=?utf-8?B?" . base64_encode($sSubject) . "?=";
			$sSubject = $sSubject;
			
			if(!$sSender)
			{
				$sSender = TECHNICAL_EMAIL;
			}
				
			$sHeaders = "From: $sSender\r\n".
			"Reply-To: $sSender\r\n" .
			"MIME-Version: 1.0\r\n" .
			"Content-type: text/html; charset=UTF-8\r\n";
		
			mail($eEmail, $sSubject, $sContent, $sHeaders);
	}
		
		/**
		 * Funkcja zwraca rozszerzenie pliku
		 *
		 * @param String $input_file_name - nazwa pola formularza typu 'file'
		 * @return String - rozszerzenie pliku
		 */
		protected function GetFileExt($input_file_name)
		{
			
			// pobieranie rozszerzenia pliku
			$tab_name = explode('.',$_FILES[$input_file_name]['name']);
			$ext_tab = array_reverse($tab_name);
			$ext_file = $ext_tab[0];
			return $ext_file;
			
		}
		
		/**
		 * Funkcja zwraca nazwę pliku bez rozszerzenia
		 *
		 * @param String $input_file_name - Nazwa pola formularza typu file
		 * @return String - nazwa pliku bez rozszerzenia
		 */
		protected function GetNameFromFile($file_name)
		{
			
			// pobieranie rozszerzenia pliku
			$tab_name = explode('.',$file_name);
			unset($tab_name[count($tab_name) - 1]);
			$file_name = implode('',$tab_name);
			return $file_name;
			
		}		
		
		/**
		 * Funkcja pobiera rozszerzenie pliku o podanej w parametrze ścieżce
		 *
		 * @param unknown_type $input_file_name
		 * @return unknown
		 */
		protected function GetExtFromFile($input_file_name)
		{
			
			// pobieranie rozszerzenia pliku
			$tab_name = explode('.',$input_file_name);
			$ext_tab = array_reverse($tab_name);
			$ext_file = $ext_tab[0];
			return $ext_file;
			
		}
				
		
		protected function make_watermark($file,$watermark,$position,$text = '')
		{

			$ext1 = $this->GetExtFromFile($watermark); $function_name1 = 'imagecreatefrom'.$ext1;			
			
			$image1 = $function_name1( $watermark ); // importujemy plik ze znakiem
			
			// DODAWANIE TEKSTU DO OBRAZKA
			$orange = imagecolorallocate($image1, 220, 30, 30);
			imagestring($image1, 5, 100, 5, $text, $orange);			
			
			$ext2 = $this->GetExtFromFile($file); 
			
			if($ext2 == 'jpg') $ext2 = 'jpeg';
			
			$function_name2 = 'imagecreatefrom'.$ext2;
			$image2 = $function_name2( $file ); // otwieramy plik jpg, na którym ma być naklejony znaczek
			
			$plik_w = imagesx( $image2 ); // szerokość pliku
			$plik_h = imagesy( $image2 ); // wysokość pliku
			$znaczek_w = imagesx( $image1 ); // szerokość znaczka
			$znaczek_h = imagesy( $image1 ); // wysokość znaczka
			
			switch($position)
			{
				case "lg":
				   $od_x = 0;
				   $od_y = 0;
				break;
				
				case "pg":
				   $od_x = $plik_w - $znaczek_w;
				   $od_y = 0;
				break;
				
				case "ld":
				   $od_x = 0;
				   $od_y = $plik_h - $znaczek_h;
				break;
				
				case "pd":
				   $od_x = $plik_w - $znaczek_w;
				   $od_y = $plik_h - $znaczek_h;
				break;
			}

			$result = imagecopy( $image2, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h );

			imagejpeg( $image2,$file );
			imagedestroy( $image1 );
			imagedestroy( $image2 );
		}		
		
		/**
		 * Funkcja uploaduje plik z pola w formularzu do określonej lokalizacji
		 *
		 * @param String $input_file_name - nazwa pola input w formularzu
		 * @param unknown_type $path_to_upload - ścieżka do katalogu docelowego Z UKOŚNIKIEM NA KOŃCU!!!!!!!!!
		 * @return Boolean - true w przypadku powodzenia, false w przypadku nieprawidłowej operacji
		 */
		public function UploadFile($input_file_name = null,$path_to_upload = null, $name=null)
		{
			
			// pobieranie rozszerzenia pliku
			$tab_name = explode('.',$_FILES[$input_file_name]['name']);
			$ext_tab = array_reverse($tab_name);
			$ext_file = $ext_tab[0];
			
			
			// generacja nazwy pliku
            if($name != null)
            {
                $newName = $name;
            }
            else
            {
                $newName = date('d:m:y:h:i');
                $newName = md5($newName.''.$_FILES[$input_file_name]['name']);
            }
			

			// nazwa pliku:
			$file_name = $newName.'.'.$ext_file;
			
			// tymczasowy plik na serwerze
			$file_tmp = $_FILES[$input_file_name]['tmp_name'];
			
	
			
			if(isset($input_file_name) && isset($path_to_upload))
			{
				
				if(is_uploaded_file($file_tmp))
				{
					// do obsługi 
					if(@move_uploaded_file($file_tmp,$path_to_upload.$file_name))
					{
						
						return $file_name;
						
					}
					else 
					{
						
						return false;
						
					}
					
				}
				else 
				{
					
					return false;
					
				}
				
			}
			else 
			{
				
				return false;
				
			}
			
			return false;
			
		} // end UploadFile
		
		
		
		/**
		 * Funkcja usuwa plik o podanej ścieżce
		 *
		 * @param String $file_name - pełna ścieżka do pliku razem z nazwą pliku
		 * @return Boolean - true w przypadku powodzenia, false w przypadku błędu
		 */
		protected function RemoveFile($file_name)
		{
			$result = true;
			
			if(file_exists($file_name))
			{
				
				$result = unlink($file_name);
					
			}
			
			return $result;
		
		} // end RemoveFile
		
		protected function checkIfVip()
		{
			if(isset($_SESSION[PREFIX]['user']['level'])&&$_SESSION[PREFIX]['user']['level']!='')
			{
				$level = $_SESSION[PREFIX]['user']['level'];
				
				if($level!=2)
				{
					$_SESSION[PREFIX]['message'] = "Musisz być vipem żeby mieć dostęp tych opcji";
					$this -> FriendlyLink("glowna.html");
				}
			}
			else
			{
				$_SESSION[PREFIX]['message'] = "Musisz być vipem żeby mieć dostęp tych opcji";
				$this -> FriendlyLink("glowna.html");
			}
			
			
			
		}
		
		/**
		 * Funkcja zwraca ip użytkownika
		 *
		 * @return unknown
		 */
		function get_user_IP()
		{
			
			if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
				
			    $real_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
			    
			}
			else 
			{
				
			  $real_ip = $_SERVER['REMOTE_ADDR'];
			  
			}
			
			return $real_ip;
		
		} // end get_user_IP
		
		
		/**
		 * Funkcja zamienia polskie znaki w tekście 
		 *
		 * @param String $tekst
		 * @return String
		 */
		protected function replace_pl_chars($tekst)
		{
			
			return str_replace(array('ą','ć','ę','ł','ń','ó','ś','ż','ź','Ą','Ć','Ę','Ł','Ń','Ó','Ś','Ż','Ź'), array('a','c','e','l','n','o','s','z','z','A','C','E','L','N','O','S','Z','Z'),$tekst);
		
		}		
			 		
	}
?>
